#include <stdio.h>
#include <stdlib.h>
#define MAX 10240
// 递归调用
int ack_2(int m, int n)
{
    if (m == 0)
        return n + 1;
    if (n == 0)
        return ack(m - 1, 1);
    return ack(m - 1, ack(m, n - 1));
}
// 使用栈存储m的值
int ack(int m, int n)
{
    int stack[MAX], top = -1;
    if (m == 0)
        return n + 1;
    while (1)
    {
        if (m == 0)
        {
            m = stack[top--];
            n++;
        }
        else if (n == 0)
        {
            m--;
            n = 1;
        }
        else if (m != 0 && n != 0)
        {
            stack[++top] = m - 1;
            n--;
        }
        if (top < 0 && m == 0)
            return n + 1;
    }
}

int main()
{
    /*******************code*******************/
    printf("%d ", ack(3, 3));
    /******************************************/
    fflush(stdin);

    printf("\n\n****************************\n");
    printf("Press Enter key to continue\n");
    getchar();
    return 0;
    /******************************************/
}
